home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1996 September / JCSM Shareware Collection (JCS Distribution) (September 1996).ISO / prgtools / apm3212c.zip / APM1.BAS < prev    next >
BASIC Source File  |  1996-08-25  |  73KB  |  2,141 lines

  1. Attribute VB_Name = "Module1"
  2. Option Explicit
  3. Option Base 1
  4.  
  5. Global frm1 As New apm1        ' instantiate forms
  6. Global frm2 As New apm2
  7. Global frm3 As New apm3
  8.  
  9. Global AuthorFileIn As Integer  ' current status
  10.                                 ' 0=unopened
  11.                                 ' 1=opened, does not exist
  12.                                 ' 2=opened, updated
  13. Global ProgFileIn               ' 0=unopened
  14.                                 ' 1=New, prog name established
  15.                                 ' 2=Prog file Read
  16. Global Classes(200) As String   ' place to build/store 'em
  17. Global NumClasses As Integer    ' remember how many
  18.  
  19. Global ClassLevel As Integer    ' highest class level
  20.                                 ' available - use as
  21.                                 ' default for new programs
  22. Type AuthRecType
  23.  
  24.   ALink As Long                ' Link
  25.   AUpdateDate As Date          ' date of maintenance
  26.   AUpDateReason As String * 20 ' reason for update
  27.   AFirstName As String * 20    ' first name
  28.   ALastName As String * 20     ' last name
  29.   ACompany As String * 30      ' company
  30.   AAddress1 As String * 30     ' address 1
  31.   AAddress2 As String * 30     ' address 2
  32.   ACity As String * 20         ' city
  33.   AState As String * 2         ' state
  34.   AZip As String * 15          ' zip
  35.   ACountry As String * 20      ' country
  36.   ACountryCode As String * 1   ' country code
  37.                                ' U = US
  38.                                ' C = Canada
  39.                                ' O = Other
  40.   ATelephone As String * 20    ' telephone
  41.   AFax As String * 20          ' fax
  42.   ABBS As String * 20          ' BBS
  43.   ACIS As String * 20          ' CIS Number
  44.   AINetEMail As String * 50    ' internet EMail
  45.   AURL As String * 80          ' URL
  46.   AASP As Boolean              ' ASP?
  47.   ASTAR As Boolean             ' STAR?
  48.   AESC As Boolean              ' ESC?
  49.   AORG4 As Boolean             ' not used
  50.   AORG5 As Boolean             ' not used
  51.   ABestApprove As Boolean      ' best of the A2V ok?
  52.   AAprovDate As Date           '  date approved
  53.   AAprovComt As String * 20    ' approval comment
  54. End Type
  55.  
  56. Global AData As AuthRecType  ' make record for author
  57.  
  58. Type ProgRecType
  59.  
  60.   PLink As Long                 ' must match ALink
  61.   PClassLevel As Integer        ' Remember the class rev
  62.                                 ' level under which this prog
  63.                                 ' file created
  64.   PProg As String * 8           ' Program (Master key & file name)
  65.   PMaintType As String * 1      ' type of revision
  66.                                 '  A=Add
  67.                                 '  M=Maintain (Description and may substitute
  68.                                 '       Zips)
  69.                                 '  U=Update (Description, new Rev#,
  70.                                 '       must have and NEW Zips!)
  71.                                 '  D=Delete
  72.   PMaintDate As Date            ' date of this revision
  73.   PMaintComt As String * 20     ' reason
  74.   PShortDesc As String * 20     ' short desc
  75.   PMedDesc As String * 40       ' med desc
  76.   PVersion As String * 10       ' prog version
  77.   POrigDate As Date             ' orig release
  78.   PCurRelease As Date           ' cur release date
  79.   PZip1 As String * 8           ' name of zip1
  80.   PZip2 As String * 8           ' name of zip2
  81.   PZip3 As String * 8           ' name of zip3
  82.   PZip4 As String * 8           ' name of zip4
  83.   PZip5 As String * 8           ' name of zip5
  84.   PZip6 As String * 8           ' name of zip6
  85.   PVend1 As String * 8          ' name of vend1
  86.   PVend2 As String * 8          ' name of vend2
  87.   PVend3 As String * 8          ' name of vend3
  88.   PVend4 As String * 8          ' name of vend4
  89.   PVend5 As String * 8          ' name of vend5
  90.   PVend6 As String * 8          ' name of vend6
  91.   PScreen As String * 8         ' name of screen file
  92.   PSize1 As Single              ' full size of zip1
  93.   PSize2 As Single              ' full size of zip2
  94.   PSize3 As Single              ' full size of zip3
  95.   PSize4 As Single              ' full size of zip4
  96.   PSize5 As Single              ' full size of zip5
  97.   PSize6 As Single              ' full size of zip6
  98.   PScrSize As Single            ' full size of screen file
  99.   PTextEnv As String * 15       ' text environment
  100.   PEnvDOS As Boolean            ' DOS Env
  101.   PEnvWin As Boolean            ' Win Env
  102.   PEnvWin95 As Boolean          ' W95 Env
  103.   PEnvOS2 As Boolean            ' OS2 Env
  104.   PEnvOther As Boolean          ' Other Env
  105.   PClass1 As Integer            ' index in class table
  106.   PClass2 As Integer            ' index in class table
  107.   PClass3 As Integer            ' index in class table
  108.   PClass4 As Integer            ' index in class table
  109.   PMemReq As Single             ' memory required
  110.   PHdReq As Boolean             ' hard disk required?
  111.   PHdReqInM As Single           ' hard disk in Mb
  112.   PFileIdDiz(10) As String      ' up to 10 lines
  113.   PFileIdDizLns As Integer      ' count of lines
  114.   PLongDesc(150) As String      ' up to 150 lines
  115.   PLongDescLns As Integer       ' count of lines
  116.   PKeyWords(150) As String      ' up to 150 lines
  117.   PKeyWordsLns As Integer       ' count of lines
  118.   PReg(150) As String           ' up to 150 lines
  119.   PRegLns As Integer            ' count of lines
  120.   PInstall(150) As String       ' up to 150 lines
  121.   PInstallLns As Integer        ' count of lines
  122.   PVinst(150) As String         ' up to 150 lines
  123.   PVinstLns As Integer          ' count of lines
  124.   PPermiss(150) As String      ' up to 150 lines
  125.   PPermissLns As Integer       ' count of lines
  126.  
  127. End Type
  128.  
  129. Global PData As ProgRecType    ' make record for program
  130.  
  131. Global ProgsInDir(200) As String  ' array of programs available
  132. Global ProgsIDCnt                 ' count of progs
  133.  
  134. '
  135. '   subroutine to break out up to 150 lines of memo into
  136. '         lines no longer than N characters
  137. '
  138. Public Sub BreakOutMemo(ByRef mem As String, _
  139.                         ByRef lns() As String, _
  140.                         ByRef lncnt As Integer, _
  141.                         ByRef llen As Integer)
  142.                       
  143.     Dim tmplin As String
  144.     Dim i As Integer
  145.     Dim j As Integer
  146.     Dim stopit As Boolean
  147.     
  148.     tmplin = ""
  149.     If Len(mem) = 0 Then
  150.       lns(1) = ""
  151.       lncnt = 0
  152.     Else
  153.       lncnt = 0      ' initialize
  154.       tmplin = ""
  155.       For i = 1 To UBound(lns, 1)
  156.         lns(i) = ""
  157.       Next i
  158.       For i = 1 To Len(mem)
  159.         If Mid(mem, i, 1) = Chr$(10) Then ' line feed?
  160.           If Len(tmplin) <> 0 Then
  161.             GoSub takeline
  162.           Else
  163.             lncnt = lncnt + 1
  164.             lns(lncnt) = ""
  165.           End If
  166.         ElseIf Mid(mem, i, 1) = Chr$(13) Then   ' char return?
  167.             '
  168.         Else
  169.           tmplin = tmplin + Mid(mem, i, 1)    ' build temporary line
  170.         End If
  171.       Next i
  172.     End If
  173.     
  174.     If Len(tmplin) <> 0 Then
  175.       GoSub takeline
  176.     End If
  177.     
  178.     GoTo endsub
  179.       
  180. takeline:
  181.     While Len(tmplin) > llen
  182.       j = llen
  183.       stopit = False
  184.       While stopit = False
  185.         If Mid(tmplin, j, 1) = " " Then
  186.           lncnt = lncnt + 1
  187.           lns(lncnt) = Mid(tmplin, 1, j - 1)
  188.           tmplin = Mid(tmplin, j + 1, Len(tmplin) - j)
  189.           stopit = True
  190.         Else
  191.           If j > 1 Then
  192.             j = j - 1
  193.           Else
  194.             lncnt = lncnt + 1
  195.             lns(lncnt) = Mid(tmplin, 1, llen)
  196.             tmplin = Mid(tmplin, llen + 1, Len(tmplin) - llen)
  197.             stopit = True
  198.           End If
  199.         End If
  200.       Wend
  201.     Wend
  202.     lncnt = lncnt + 1
  203.     lns(lncnt) = tmplin
  204.     tmplin = ""
  205.     Return
  206.     
  207. endsub:                      ' artificial end of sub point
  208.  
  209. End Sub
  210.  
  211. '
  212. '   subroutine to reformat up to 150 lines of memo into
  213. '         lines no longer than N characters
  214. '   more than single carriage return/line feed pairs
  215. '       are preserved.  Other lines are combined, then broken into lines
  216. '       no longer than llen.
  217. '
  218. Public Sub ReformatMemo(ByRef mem As String, _
  219.                         ByRef memback As String, _
  220.                         ByRef llen As Integer)
  221.                       
  222.     Dim i As Integer
  223.     Dim prev_char As String
  224.     Dim had_one As Boolean
  225.     Dim had_two As Boolean
  226.     Dim stopit As Boolean
  227.     
  228.     had_one = False          ' no line feed yet
  229.     had_two = False          ' no line feed yet
  230.     memback = ""
  231.     For i = 1 To Len(mem)
  232.         If Mid(mem, i, 1) = Chr$(10) Then ' line feed?
  233.             If had_one = False Then
  234.                 had_one = True
  235.                 had_two = False
  236.             ElseIf had_two = False Then
  237.                 had_two = True
  238.                 memback = memback + Chr$(13) + Chr$(10) + Chr$(13) + Chr$(10)
  239.             Else
  240.                 memback = memback + Chr$(13) + Chr$(10)
  241.             End If
  242.         ElseIf Mid(mem, i, 1) = Chr$(13) Then   ' char return?
  243.             '
  244.         Else
  245.             If had_one = True And _
  246.                had_two = False And _
  247.                prev_char <> " " And _
  248.                Mid(mem, i, 1) <> " " Then
  249.                  memback = memback + " "    ' plug space
  250.             End If
  251.             had_one = False
  252.             had_two = False
  253.             memback = memback + Mid(mem, i, 1)    ' build temporary line
  254.             prev_char = Mid(mem, i, 1)            ' save it
  255.         End If
  256.     Next i
  257.  
  258. End Sub
  259.  
  260.  
  261. '
  262. '    build classes based on level # input
  263. '
  264. '    set global variable ClassLevel to highest
  265. '     default level accieved below then
  266. '     use that value for defaults for new programs
  267. '
  268. Public Sub BuildClasses(lev As Integer, _
  269.                         cnt As Integer)
  270.  
  271. Dim i As Integer
  272.  
  273. If lev = 1 Then
  274.  
  275.   i = 1
  276.   Classes(i) = "   0 (None)"
  277.   i = i + 1
  278.   Classes(i) = " 200 Accounting/Financial"
  279.   i = i + 1
  280.   Classes(i) = " 300 Artificial Intell."
  281.   i = i + 1
  282.   Classes(i) = " 400 BBS Systems"
  283.   i = i + 1
  284. '  Classes(i) = " 600 Business"  ' note group item
  285. '  i = i + 1
  286. '  Classes(i) = " 610 Available" ' note dummy item
  287. '  i = i + 1
  288.   Classes(i) = " 620 Business-Order/Bill/Acct"
  289.   i = i + 1
  290.   Classes(i) = " 630 Business-Payroll"
  291.   i = i + 1
  292.   Classes(i) = " 640 Business-Mkting/Sales"
  293.   i = i + 1
  294.   Classes(i) = " 650 Business-Barcodes/ZipCodes"
  295.   i = i + 1
  296.   Classes(i) = " 660 Business-PIMS/Contact/Lists"
  297.   i = i + 1
  298.   Classes(i) = " 670 Business -Programs"
  299.   i = i + 1
  300.   Classes(i) = " 680 Business-Utilities"
  301.   i = i + 1
  302.   Classes(i) = " 690 Business-Other"
  303.   i = i + 1
  304.   Classes(i) = " 800 Calculators"
  305.   i = i + 1
  306.   Classes(i) = "1000 Cataloging"
  307.   i = i + 1
  308.   Classes(i) = "1200 Communications"
  309.   i = i + 1
  310.   Classes(i) = "1400 Databases-Applicatns"
  311.   i = i + 1
  312.   Classes(i) = "1600 DataBases-Full Feat."
  313.   i = i + 1
  314.   Classes(i) = "1800 Databases-Other"
  315.   i = i + 1
  316.   Classes(i) = "2000 DeskTop Publishing"
  317.   i = i + 1
  318.   Classes(i) = "2200 Drivers"
  319.   i = i + 1
  320.   Classes(i) = "2400 Editors"
  321.   i = i + 1
  322. '  Classes(i) = "2600 Educational"   ' note group
  323. '  i = i + 1
  324.   Classes(i) = "2610 Educational-Teacher Tools"
  325.   i = i + 1
  326.   Classes(i) = "2620 Educational-Tutorials"
  327.   i = i + 1
  328.   Classes(i) = "2630 Educational-Games"
  329.   i = i + 1
  330.   Classes(i) = "2640 Educational-Kids 3-8"
  331.   i = i + 1
  332.   Classes(i) = "2650 Educational-College"
  333.   i = i + 1
  334. '  Classes(i) = "2660 Educational-Available"
  335. '  i = i + 1
  336. '  Classes(i) = "2670 Educational-Available"
  337. '  i = i + 1
  338.   Classes(i) = "2680 Educational-Utilities"
  339.   i = i + 1
  340.   Classes(i) = "2690 Educational-Other"
  341.   i = i + 1
  342.   Classes(i) = "2700 Elec.Books-Perdcals"
  343.   i = i + 1
  344.   Classes(i) = "2800 Financial"
  345.   i = i + 1
  346.   Classes(i) = "3000 Fonts"
  347.   i = i + 1
  348. '  Classes(i) = "3010 Games Publishers"
  349. '  i = i + 1
  350.   Classes(i) = "3011 MVP Software"
  351.   i = i + 1
  352.   Classes(i) = "3012 ID Software"
  353.   i = i + 1
  354.   Classes(i) = "3013 Apogee Software"
  355.   i = i + 1
  356.   Classes(i) = "3014 Soleau Software"
  357.   i = i + 1
  358.   Classes(i) = "3100 Game-Action"
  359.   i = i + 1
  360.   Classes(i) = "3200 Game-Adventure"
  361.   i = i + 1
  362.   Classes(i) = "3400 Game-Arcade"
  363.   i = i + 1
  364.   Classes(i) = "3600 Game-Board"
  365.   i = i + 1
  366.   Classes(i) = "3800 Game-Card"
  367.   i = i + 1
  368.   Classes(i) = "3900 Game-Casino"
  369.   i = i + 1
  370.   Classes(i) = "4000 Game-Graphic"
  371.   i = i + 1
  372.   Classes(i) = "4200 Game-Hints/Unprots"
  373.   i = i + 1
  374.   Classes(i) = "4400 Game-Simulator"
  375.   i = i + 1
  376.   Classes(i) = "4500 Game-Super VGA"
  377.   i = i + 1
  378.   Classes(i) = "4600 Game-Other"
  379.   i = i + 1
  380.   Classes(i) = "4800 Genealogy"
  381.   i = i + 1
  382.   Classes(i) = "5000 Graphics-CAD"
  383.   i = i + 1
  384.   Classes(i) = "5200 Graphics-Images"
  385.   i = i + 1
  386.   Classes(i) = "5400 Graphics-Programs"
  387.   i = i + 1
  388.   Classes(i) = "5600 Help Systems"
  389.   i = i + 1
  390.   Classes(i) = "5700 Hobbies"
  391.   i = i + 1
  392. '  Classes(i) = "5800 Home/Personal"
  393. '  i = i + 1
  394.   Classes(i) = "5810 Home/Pers.-Accting/Business"
  395.   i = i + 1
  396.   Classes(i) = "5820 Home/Pers.-Org/PIMS/Calendars/Lists"
  397.   i = i + 1
  398.   Classes(i) = "5830 Home/Pers.-Astrology"
  399.   i = i + 1
  400.   Classes(i) = "5840 Home/Pers.-Sporting"
  401.   i = i + 1
  402.   Classes(i) = "5850 Home/Pers.-Health/Cooking/Recipes"
  403.   i = i + 1
  404.   Classes(i) = "5860 Home/Pers.-Stocks/Bonds"
  405.   i = i + 1
  406. '  Classes(i) = "5870 Home/Pers.-Available"
  407. '  i = i + 1
  408.   Classes(i) = "5880 Home/Pers.-Utilities"
  409.   i = i + 1
  410.   Classes(i) = "5890 Home/Pers.-Other"
  411.   i = i + 1
  412.   Classes(i) = "6000 Humor"
  413.   i = i + 1
  414.   Classes(i) = "6100 Internet"
  415.   i = i + 1
  416.   Classes(i) = "6200 Icons"
  417.   i = i + 1
  418.   Classes(i) = "6300 Marketing Aids"
  419.   i = i + 1
  420.   Classes(i) = "6400 Legal"
  421.   i = i + 1
  422.   Classes(i) = "6500 Lotto Programs"
  423.   i = i + 1
  424.   Classes(i) = "6600 Medical/Health"
  425.   i = i + 1
  426.   Classes(i) = "6800 Music"
  427.   i = i + 1
  428.   Classes(i) = "7000 Productivity"
  429.   i = i + 1
  430.   Classes(i) = "7200 Progmer's Tools/Libs"
  431.   i = i + 1
  432.   Classes(i) = "7400 Religious"
  433.   i = i + 1
  434.   Classes(i) = "7600 Science/Math"
  435.   i = i + 1
  436.   Classes(i) = "7700 Sports"
  437.   i = i + 1
  438.   Classes(i) = "7800 Spreadsheets/Templts"
  439.   i = i + 1
  440.   Classes(i) = "8000 Speech"
  441.   i = i + 1
  442. '  Classes(i) = "8200 Utilities"
  443. '  i = i + 1
  444.   Classes(i) = "8210 Utilities-Printing"
  445.   i = i + 1
  446.   Classes(i) = "8220 Utilities-Screen Savers"
  447.   i = i + 1
  448.   Classes(i) = "8230 Utilities-File"
  449.   i = i + 1
  450.   Classes(i) = "8240 Utilities-Menues"
  451.   i = i + 1
  452.   Classes(i) = "8250 Utilities-Screen"
  453.   i = i + 1
  454.   Classes(i) = "8260 Utilities-Communications"
  455.   i = i + 1
  456.   Classes(i) = "8270 Utilities-Sound"
  457.   i = i + 1
  458. '  Classes(i) = "8280 Utilities-Available"
  459. '  i = i + 1
  460.   Classes(i) = "8290 Utilities-Other"
  461.   i = i + 1
  462.   Classes(i) = "8400 Virus Protection"
  463.   i = i + 1
  464.   Classes(i) = "8600 Word Processors"
  465.   i = i + 1
  466.   Classes(i) = "8800 Writing Aids"
  467.   i = i + 1
  468.   Classes(i) = "9800 Other"
  469.   cnt = i
  470.   
  471. Else
  472.   MsgBox ("Building classes - level not supported")
  473.   End
  474. End If
  475. End Sub
  476.  
  477.  
  478. Public Sub ClearProgArea()
  479.  
  480.   Dim i As Integer
  481.   Dim looper As Boolean
  482.   Dim CurDirEntry As String
  483.   
  484.   ProgFileIn = 0                           ' must do something before saving
  485.                                            ' program must be established somehow
  486.                                            ' either by keying, or by getting file
  487.                                            '   by reading
  488.   PData.PLink = AData.ALink                          ' must match ALink
  489.   PData.PClassLevel = ClassLevel           ' Remember the class rev
  490.                                            ' level under which this prog
  491.                                            ' file created
  492.   PData.PProg = Space(8)                   ' Program (Master key & file name)
  493.   PData.PMaintType = "A"                   ' Set for Add if new
  494.   frm3.apm3RevAdd = True                   ' set screen
  495.   frm3.apm3RevMaint = False
  496.   frm3.apm3RevUpdate = False
  497.   frm3.apm3RevDelete = False
  498.   PData.PMaintDate = CDate("1/1/1970")     ' date of this revision
  499.   frm3.apm3PRevDate = ""
  500.   PData.PMaintComt = Space(20)             ' maint comment
  501.   frm3.apm3PRevReason = ""
  502.   PData.PShortDesc = Space(20)             ' short desc
  503.   frm3.apm3PShtDesc = ""
  504.   PData.PMedDesc = Space(40)               ' med desc
  505.   frm3.apm3PMedDesc = ""
  506.   PData.PVersion = Space(10)               ' prog version
  507.   frm3.apm3PVer = ""
  508.   PData.POrigDate = CDate("1/1/1970")      ' orig release
  509.   frm3.apm3PODate = ""
  510.   PData.PCurRelease = CDate("1/1/1970")    ' cur release date
  511.   frm3.apm3PCDate = ""
  512.   PData.PZip1 = Space(8)                   ' name of zip1
  513.   frm3.apm3PZip1 = ""
  514.   PData.PZip2 = Space(8)                   ' name of zip2
  515.   frm3.apm3PZip2 = ""
  516.   PData.PZip3 = Space(8)                   ' name of zip3
  517.   frm3.apm3PZip3 = ""
  518.   PData.PZip4 = Space(8)                   ' name of zip4
  519.   frm3.apm3PZip4 = ""
  520.   PData.PZip5 = Space(8)                   ' name of zip5
  521.   frm3.apm3PZip5 = ""
  522.   PData.PZip6 = Space(8)                   ' name of zip6
  523.   frm3.apm3PZip6 = ""
  524.   PData.PVend1 = Space(8)                  ' name of vend1
  525.   frm3.apm3PVend1 = ""
  526.   PData.PVend2 = Space(8)                  ' name of vend2
  527.   frm3.apm3PVend2 = ""
  528.   PData.PVend3 = Space(8)                  ' name of vend3
  529.   frm3.apm3PVend3 = ""
  530.   PData.PVend4 = Space(8)                  ' name of vend4
  531.   frm3.apm3PVend4 = ""
  532.   PData.PVend5 = Space(8)                  ' name of vend5
  533.   frm3.apm3PVend5 = ""
  534.   PData.PVend6 = Space(8)                  ' name of vend6
  535.   frm3.apm3PVend6 = ""
  536.   PData.PScreen = Space(8)                 ' name of screen file
  537.   frm3.apm3PScreen = ""
  538.   PData.PSize1 = 0                         ' full size of zip1
  539.   frm3.apm3PSize1 = ""
  540.   PData.PSize2 = 0                         ' full size of zip2
  541.   frm3.apm3PSize2 = ""
  542.   PData.PSize3 = 0                         ' full size of zip3
  543.   frm3.apm3PSize3 = ""
  544.   PData.PSize4 = 0                         ' full size of zip4
  545.   frm3.apm3PSize4 = ""
  546.   PData.PSize5 = 0                         ' full size of zip5
  547.   frm3.apm3PSize5 = ""
  548.   PData.PSize6 = 0                         ' full size of zip6
  549.   frm3.apm3PSize6 = ""
  550.   PData.PScrSize = 0                       ' full size of screen file
  551.   frm3.apm3PScreenSize = ""
  552.   PData.PTextEnv = Space(15)               ' text environment
  553.   frm3.apm3PEnvText = ""
  554.   PData.PEnvDOS = False                    ' DOS Env
  555.   frm3.apm3PEDOS = False
  556.   PData.PEnvWin = False                    ' Win Env
  557.   frm3.apm3PEWin = False
  558.   PData.PEnvWin95 = False                  ' W95 Env
  559.   frm3.apm3PEWin95 = False
  560.   PData.PEnvOS2 = False                    ' OS2 Env
  561.   frm3.apm3PEOS2 = False
  562.   PData.PEnvOther = False                  ' Other Env
  563.   frm3.apm3PEOther = False
  564.   PData.PClass1 = 0                        ' index in class table
  565.   frm3.apm3Class1.ListIndex = 0
  566.   PData.PClass2 = 0                        ' index in class table
  567.   frm3.apm3Class2.ListIndex = 0
  568.   PData.PClass3 = 0                        ' index in class table
  569.   frm3.apm3Class3.ListIndex = 0
  570.   PData.PClass4 = 0                        ' index in class table
  571.   frm3.apm3Class4.ListIndex = 0
  572.   PData.PMemReq = 0                        ' memory required
  573.   frm3.apm3PMem = ""
  574.   PData.PHdReq = False                     ' hard disk required?
  575.   frm3.apm3PHDReq = False
  576.   PData.PHdReqInM = 0                      ' hard disk in Mb
  577.   frm3.apm3PHDSize = ""
  578.   For i = 1 To 10
  579.     PData.PFileIdDiz(i) = ""               ' 10 lines
  580.   Next i
  581.   PData.PFileIdDizLns = 0                  ' count of lines
  582.   frm3.apm3PFileidDiz.Text = ""
  583.   For i = 1 To 150
  584.     PData.PLongDesc(i) = ""                ' 150 lines
  585.   Next i
  586.   PData.PLongDescLns = 0                   ' count of lines
  587.   frm3.apm3PLongDesc.Text = ""
  588.   For i = 1 To 150
  589.     PData.PKeyWords(i) = ""                ' 150 lines
  590.   Next i
  591.   PData.PKeyWordsLns = 0                   ' count of lines
  592.   frm3.apm3PKeywords.Text = ""
  593.   For i = 1 To 150
  594.     PData.PReg(i) = ""                     ' 150 lines
  595.   Next i
  596.   PData.PRegLns = 0                        ' count of lines
  597.   frm3.apm3PRegistration.Text = ""
  598.   For i = 1 To 150
  599.     PData.PInstall(i) = ""                 '  150 lines
  600.   Next i
  601.   PData.PInstallLns = 0                    ' count of lines
  602.   frm3.apm3PInstall.Text = ""
  603.   For i = 1 To 150
  604.     PData.PVinst(i) = ""                   ' 150 lines
  605.   Next i
  606.   PData.PVinstLns = 0                      ' count of lines
  607.   frm3.apm3PVInst.Text = ""
  608.   For i = 1 To 150
  609.     PData.PPermiss(i) = ""                 ' 150 lines
  610.   Next i
  611.   PData.PPermissLns = 0                    ' count of lines
  612.   frm3.apm3PPermiss.Text = ""
  613.   For i = 1 To 200                         ' get available program files
  614.     ProgsInDir(200) = ""
  615.   Next i
  616.   ProgsIDCnt = 0                           ' count of progs
  617.   CurDirEntry = Dir("*.jcs", vbNormal)
  618.   If CurDirEntry <> "" Then                ' no .jcs files
  619.     '  dir return is xxxx.jcs; drop the .jcs
  620.     CurDirEntry = Trim(UCase(Left(CurDirEntry, Len(CurDirEntry) - 4)))
  621.     If CurDirEntry <> "AUTHOR" Then
  622.       ProgsIDCnt = ProgsIDCnt + 1
  623.       ProgsInDir(ProgsIDCnt) = CurDirEntry
  624.     End If
  625.     looper = True
  626.     While looper = True
  627.       CurDirEntry = Dir()
  628.       If CurDirEntry = "" Then
  629.         looper = False
  630.       Else
  631.         CurDirEntry = Trim(UCase(Left(CurDirEntry, Len(CurDirEntry) - 4)))
  632.         If CurDirEntry <> "AUTHOR" Then
  633.           ProgsIDCnt = ProgsIDCnt + 1
  634.           ProgsInDir(ProgsIDCnt) = CurDirEntry
  635.         End If
  636.       End If
  637.     Wend
  638.   End If
  639.                         '  now set screen
  640.   frm3.apm3AuthNumber = Right("     " + Str(PData.PLink), 5)
  641.   frm3.apm3AuthName = ""
  642.   If Trim(AData.AFirstName) <> "" Then
  643.     frm3.apm3AuthName = frm3.apm3AuthName + Trim(AData.AFirstName) + " "
  644.   End If
  645.   If Trim(AData.ALastName) <> "" Then
  646.     frm3.apm3AuthName = frm3.apm3AuthName + Trim(AData.ALastName)
  647.   End If
  648.   If Trim(AData.ACompany) <> "" Then
  649.     frm3.apm3AuthName = Left(frm3.apm3AuthName + "/" + Trim(AData.ACompany), 40)
  650.   End If
  651.   frm3.apm3Prog.Clear                    ' clear program items list
  652.   If ProgsIDCnt > 0 Then
  653.     For i = 1 To ProgsIDCnt
  654.       frm3.apm3Prog.AddItem ProgsInDir(i)
  655.     Next i
  656.     frm3.apm3Prog.Text = ProgsInDir(1)
  657.   End If
  658.   frm3.apm3RevAdd = True                 ' set screen
  659.   frm3.apm3RevMaint = False
  660.   frm3.apm3RevUpdate = False
  661.   frm3.apm3RevDelete = False
  662.   frm3.apm3PRevDate = ""                 ' no entry to start
  663.   frm3.apm3PRevReason = ""
  664.  
  665. End Sub
  666.  
  667. '
  668. '
  669. '       this subroutine reads the author.jcs
  670. '       file, puts it in the author fields
  671. '       and prepares it for display
  672. '
  673. Public Sub GetAuthorFile()
  674.  
  675.     Dim auth_lun As Integer         ' logical lun for author file
  676.     Dim name As String
  677.     Dim value As String
  678.     Dim mm As String
  679.     Dim dd As String
  680.     Dim yy As String
  681.     
  682.     AuthorFileIn = 0                  ' initialize as not yet gotten
  683.     AData.ALink = 0                   ' initialize fields
  684.     frm2.apm2ANumber = "(Not Valid)"
  685.     AData.AUpdateDate = CDate("1/1/70")
  686.     frm2.apm2AIDate = ""
  687.     AData.AUpDateReason = Space(20)
  688.     frm2.apm2AUReason = ""
  689.     AData.AFirstName = Space(20)
  690.     frm2.apm2AFirstName = ""
  691.     AData.ALastName = Space(20)
  692.     frm2.apm2ALastName = ""
  693.     AData.ACompany = Space(30)
  694.     frm2.apm2ACompany = ""
  695.     AData.AAddress1 = Space(30)
  696.     frm2.apm2AAddr1 = ""
  697.     AData.AAddress2 = Space(30)
  698.     frm2.apm2AAddr2 = ""
  699.     AData.ACity = Space(20)
  700.     frm2.apm2ACity = ""
  701.     AData.AState = "  "
  702.     frm2.apm2AState = ""
  703.     AData.AZip = Space(15)
  704.     frm2.apm2AZip = ""
  705.     AData.ACountry = Space(20)
  706.     frm2.apm2ACountry = ""
  707.     AData.ACountryCode = " "
  708.     frm2.apm2ACountryCode = ""
  709.     AData.ATelephone = Space(20)
  710.     frm2.apm2ATelephone = ""
  711.     AData.AFax = Space(20)
  712.     frm2.apm2AFax = ""
  713.     AData.ABBS = Space(20)
  714.     frm2.apm2ABBS = ""
  715.     AData.ACIS = Space(20)
  716.     frm2.apm2ACIS = ""
  717.     AData.AINetEMail = Space(50)
  718.     frm2.apm2AIEMail = ""
  719.     AData.AURL = Space(80)
  720.     frm2.apm2AURL = ""
  721.     AData.ABestApprove = False
  722.     frm2.apm2ABestApp = Unchecked
  723.     AData.AASP = False
  724.     frm2.apm2AASP = Unchecked
  725.     AData.ASTAR = False
  726.     frm2.apm2ASTAR = Unchecked
  727.     AData.AESC = False
  728.     frm2.apm2AESC = Unchecked
  729.     AData.AORG4 = False
  730.     frm2.apm2AORG4 = Unchecked
  731.     AData.AORG5 = False
  732.     frm2.apm2AORG5 = Unchecked
  733.     AData.AAprovDate = CDate("1/1/70")
  734.     frm2.apm2ABestAppDate = ""
  735.     AData.AAprovComt = Space(20)
  736.     frm2.apm2ABestAppCmt = ""
  737.     
  738.     If Dir(CurDir + "\author.jcs") <> "" Then '  exists
  739.        
  740.         auth_lun = FreeFile(0)    ' get lun
  741.         
  742.         Open ".\author.jcs" For Input As auth_lun
  743.         
  744.         While (Not EOF(auth_lun))
  745.           Call GetNameValue(auth_lun, name, value)
  746.           name = Trim(UCase(name))
  747.           If name = "LINK" Then
  748.             AData.ALink = CLng(value)                   ' initialize fields
  749.             frm2.apm2ANumber = Right("     " + value, 5)
  750.           ElseIf name = "UPDATEDATE" Then
  751.             If IsDate(value) And value <> "1/1/1970" Then
  752.               AData.AUpdateDate = CDate(value)
  753.               frm2.apm2AIDate = Trim(Str(Month(AData.AUpdateDate))) _
  754.                                 + "/" _
  755.                                 + Trim(Str(Day(AData.AUpdateDate))) _
  756.                                 + "/" _
  757.                                 + Trim(Str(Year(AData.AUpdateDate)))
  758.             Else
  759.               AData.AUpdateDate = CDate("1/1/70")
  760.               frm2.apm2AIDate = ""
  761.             End If
  762.           ElseIf name = "UPDATEREASON" Then
  763.             AData.AUpDateReason = value
  764.             frm2.apm2AUReason = Trim(value)
  765.           ElseIf name = "FIRSTNAME" Then
  766.             AData.AFirstName = value
  767.             frm2.apm2AFirstName = Trim(value)
  768.           ElseIf name = "LASTNAME" Then
  769.             AData.ALastName = value
  770.             frm2.apm2ALastName = Trim(value)
  771.           ElseIf name = "COMPANY" Then
  772.             AData.ACompany = value
  773.             frm2.apm2ACompany = Trim(value)
  774.           ElseIf name = "ADDRESS1" Then
  775.             AData.AAddress1 = value
  776.             frm2.apm2AAddr1 = Trim(value)
  777.           ElseIf name = "ADDRESS2" Then
  778.             AData.AAddress2 = value
  779.             frm2.apm2AAddr2 = Trim(value)
  780.           ElseIf name = "CITY" Then
  781.             AData.ACity = value
  782.             frm2.apm2ACity = Trim(value)
  783.           ElseIf name = "STATE" Then
  784.             AData.AState = value
  785.             frm2.apm2AState = Trim(value)
  786.           ElseIf name = "ZIP" Then
  787.             AData.AZip = value
  788.             frm2.apm2AZip = Trim(value)
  789.           ElseIf name = "COUNTRY" Then
  790.             AData.ACountry = value
  791.             frm2.apm2ACountry = Trim(value)
  792.           ElseIf name = "COUNTRYCODE" Then
  793.             AData.ACountryCode = value
  794.             frm2.apm2ACountryCode = Trim(value)
  795.           ElseIf name = "TELEPHONE" Then
  796.             AData.ATelephone = value
  797.             frm2.apm2ATelephone = Trim(value)
  798.           ElseIf name = "FAX" Then
  799.             AData.AFax = value
  800.             frm2.apm2AFax = Trim(value)
  801.           ElseIf name = "BBS" Then
  802.             AData.ABBS = value
  803.             frm2.apm2ABBS = Trim(value)
  804.           ElseIf name = "CIS" Then
  805.             AData.ACIS = value
  806.             frm2.apm2ACIS = Trim(value)
  807.           ElseIf name = "EMAIL" Then
  808.             AData.AINetEMail = value
  809.             frm2.apm2AIEMail = Trim(value)
  810.           ElseIf name = "URL" Then
  811.             AData.AURL = value
  812.             frm2.apm2AURL = Trim(value)
  813.           ElseIf name = "ASP" Then
  814.             If value = "T" Then
  815.                 AData.AASP = True
  816.                 frm2.apm2AASP = Checked
  817.             Else
  818.                 AData.AASP = False
  819.                 frm2.apm2AASP = Unchecked
  820.             End If
  821.           ElseIf name = "STAR" Then
  822.             If value = "T" Then
  823.                 AData.ASTAR = True
  824.                 frm2.apm2ASTAR = Checked
  825.             Else
  826.                 AData.ASTAR = False
  827.                 frm2.apm2ASTAR = Unchecked
  828.             End If
  829.           ElseIf name = "ESC" Then
  830.             If value = "T" Then
  831.                 AData.AESC = True
  832.                 frm2.apm2AESC = Checked
  833.             Else
  834.                 AData.AESC = False
  835.                 frm2.apm2AESC = Unchecked
  836.             End If
  837.           ElseIf name = "ORG4" Then
  838.             If value = "T" Then
  839.                 AData.AORG4 = True
  840.                 frm2.apm2AORG4 = Checked
  841.             Else
  842.                 AData.AORG4 = False
  843.                 frm2.apm2AORG4 = Unchecked
  844.             End If
  845.           ElseIf name = "ORG5" Then
  846.             If value = "T" Then
  847.                 AData.AORG5 = True
  848.                 frm2.apm2AORG5 = Checked
  849.             Else
  850.                 AData.AORG5 = False
  851.                 frm2.apm2AORG5 = Unchecked
  852.             End If
  853.           ElseIf name = "BESTAPPROVE" Then
  854.             If value = "T" Then
  855.                 AData.ABestApprove = True
  856.                 frm2.apm2ABestApp = Checked
  857.             Else
  858.                 AData.ABestApprove = False
  859.                 frm2.apm2ABestApp = Unchecked
  860.             End If
  861.           ElseIf name = "APROVDATE" Then
  862.             If IsDate(value) And value <> "1/1/1970" Then
  863.               AData.AAprovDate = CDate(value)
  864.               frm2.apm2ABestAppDate = Trim(Str(Month(AData.AAprovDate))) _
  865.                                       + "/" _
  866.                                       + Trim(Str(Day(AData.AAprovDate))) _
  867.                                       + "/" _
  868.                                       + Trim(Str(Year(AData.AAprovDate)))
  869.             Else
  870.               AData.AAprovDate = CDate("1/1/70")
  871.               frm2.apm2ABestAppDate = ""
  872.             End If
  873.           ElseIf name = "APROVCOMT" Then
  874.             AData.AAprovComt = value
  875.             frm2.apm2ABestAppCmt = Trim(value)
  876.           Else
  877.             MsgBox ("Invalid field in Author file - " + name + " - ignored")
  878.           End If
  879.         Wend
  880.         Close (auth_lun)    ' done with it for now
  881.         AuthorFileIn = 2    ' successfully read
  882.     Else       ' file not found
  883.         AuthorFileIn = 1    ' tried-not yet exist
  884.     End If
  885.     
  886. End Sub
  887.  
  888.  
  889. '
  890. '  get line from file, and separate it into it's
  891. '  name and value components
  892. '
  893. Sub GetNameValue(ln As Integer, _
  894.                  nm As String, _
  895.                  st As String)
  896.             
  897.   Dim tmp As String         ' read it here
  898.   Dim i As Integer
  899.   Dim stg As Integer        ' processing sw
  900.                             ' 0=nothing yet
  901.                             ' 1=1st quote in name
  902.                             ' 2=name finished, value not started
  903.                             ' 3=value started
  904.                             ' 4=value finished
  905.   
  906.   Line Input #ln, tmp       ' get the line
  907.  
  908.   nm = ""
  909.   st = ""
  910.   stg = 0                   ' init stage
  911.   
  912.   For i = 1 To Len(tmp)
  913.     If Mid(tmp, i, 1) = Chr(34) Then ' is quote
  914.       If stg < 4 Then
  915.         stg = stg + 1
  916.         If stg = 4 And i < Len(tmp) Then
  917.             st = st + Mid(tmp, i, 1)   ' put in quote
  918.             stg = stg - 1
  919.         End If
  920.       Else
  921.         MsgBox ("invalid quote in name/value - ignored")
  922.       End If
  923.     Else
  924.       If stg = 0 Then
  925.         MsgBox ("invalid character in name/value - ignored")
  926.       ElseIf stg = 2 And Mid(tmp, i, 1) <> "," Then
  927.         MsgBox ("invalid character in name/value - ignored")
  928.       ElseIf stg = 2 And Mid(tmp, i, 1) = "," Then
  929.         '         go around the central comma
  930.       Else
  931.         If stg = 1 Then
  932.           nm = nm + Mid(tmp, i, 1)
  933.         ElseIf stg = 3 Then
  934.           st = st + Mid(tmp, i, 1)
  935.         Else
  936.           MsgBox ("invalid character in name/value - ignored")
  937.         End If
  938.       End If
  939.     End If
  940.   Next i
  941. End Sub
  942.  
  943. '
  944. '     this subroutine gets the named program file
  945. '     clears the screen areas, and loads the program file into
  946. '     the screen areas as applicable.
  947. '
  948. '
  949. Public Sub GetProgFile(PFileName As String)
  950.  
  951.   Dim i As Integer               ' work subscript
  952.   Dim j As Integer               ' work subscript
  953.   Dim k As Integer               ' work subscript
  954.   Dim wkint1 As Integer          ' for conversions
  955.   Dim wkint2 As Integer          ' for conversions
  956.   Dim clsptr As Integer          ' for conversions
  957.   Dim looper As Boolean          ' ctl loops
  958.   
  959.   Dim prog_lun As Integer         ' logical lun for author file
  960.   Dim name As String
  961.   Dim value As String
  962.   Dim mm As String
  963.   Dim dd As String
  964.   Dim yy As String
  965.  
  966.   If Trim(PFileName) = "" Then                '   does not exist
  967.                                                             '   accept cleared
  968.                                                             '   params
  969.        
  970.     Call ClearProgArea
  971.     PData.PProg = PFileName                   ' Program (Master key & file name)
  972.     frm3.apm3Prog.Text = PFileName
  973.     If Trim(frm3.apm3Prog.Text) = "" Then
  974.         ProgFileIn = 0
  975.     Else
  976.         ProgFileIn = 1
  977.     End If
  978.   ElseIf Dir(CurDir + "\" + Trim(PFileName) + ".jcs") = "" Then
  979.                                                             '   accept cleared
  980.                                                             '   params
  981.        
  982.     Call ClearProgArea
  983.     PData.PProg = PFileName                   ' Program (Master key & file name)
  984.     frm3.apm3Prog.Text = PFileName
  985.     If Trim(frm3.apm3Prog.Text) = "" Then
  986.         ProgFileIn = 0
  987.     Else
  988.         ProgFileIn = 1
  989.     End If
  990.   
  991.   Else                                ' otherwise gotta get the file stuff
  992.   
  993.     prog_lun = FreeFile(0)    ' get lun
  994.         
  995.     Open ".\" + Trim(PFileName) + ".jcs" For Input As prog_lun
  996.     ProgFileIn = 2                  ' we have read it
  997.     While (Not EOF(prog_lun))
  998.       Call GetNameValue(prog_lun, name, value)
  999.       name = Trim(UCase(name))
  1000.       
  1001.       If name = "PLINK" Then
  1002.         PData.PLink = AData.ALink          ' initialize fields
  1003.         frm3.apm3AuthNumber = PData.PLink
  1004. '        PData.PLink = CLng(value)                   ' initialize fields
  1005. '        frm3.apm3AuthNumber = Right("     " + value, 5)
  1006.       ElseIf name = "CLASSLEVEL" Then
  1007.         PData.PClassLevel = CInt(value)
  1008.                                           ' here do any conversion things necessary
  1009.       ElseIf name = "PROGRAM" Then
  1010.         PData.PProg = Trim(value)                   ' Program (Master key & file name)
  1011.         apm3.apm3Prog = Trim(value)
  1012.       ElseIf name = "MAINTTYPE" Then
  1013.                  ' ignore these, as they will be set later
  1014.       ElseIf name = "MAINTDATE" Then
  1015.                  ' ignore these, as they will be set later
  1016.       ElseIf name = "MAINTCOMMENT" Then
  1017.                  ' ignore these, as they will be set later
  1018.       ElseIf name = "SHORTDESC" Then
  1019.         PData.PShortDesc = Trim(value)             ' short desc
  1020.         frm3.apm3PShtDesc = Trim(value)
  1021.       ElseIf name = "MEDDESC" Then
  1022.         PData.PMedDesc = Trim(value)               ' med desc
  1023.         frm3.apm3PMedDesc = Trim(value)
  1024.       ElseIf name = "VERSION" Then
  1025.         PData.PVersion = Trim(value)               ' prog version
  1026.         frm3.apm3PVer = Trim(value)
  1027.       ElseIf name = "ORIGDATE" Then
  1028.         If IsDate(value) And value <> "1/1/1970" Then
  1029.           PData.POrigDate = CDate(value)
  1030.           frm3.apm3PODate = Trim(Str(Month(PData.POrigDate))) _
  1031.                             + "/" _
  1032.                             + Trim(Str(Day(PData.POrigDate))) _
  1033.                             + "/" _
  1034.                             + Trim(Str(Year(PData.POrigDate)))
  1035.         Else
  1036.           PData.POrigDate = CDate("1/1/70")
  1037.           frm3.apm3PODate = ""
  1038.         End If
  1039.       ElseIf name = "CURDATE" Then
  1040.         If IsDate(value) And value <> "1/1/1970" Then
  1041.           PData.PCurRelease = CDate(value)
  1042.           frm3.apm3PCDate = Trim(Str(Month(PData.PCurRelease))) _
  1043.                             + "/" _
  1044.                             + Trim(Str(Day(PData.PCurRelease))) _
  1045.                             + "/" _
  1046.                             + Trim(Str(Year(PData.PCurRelease)))
  1047.         Else
  1048.           PData.PCurRelease = CDate("1/1/70")
  1049.           frm3.apm3PCDate = ""
  1050.         End If
  1051.       ElseIf name = "ZIP1" Then
  1052.         PData.PZip1 = Trim(value)                   ' name of zip1
  1053.         frm3.apm3PZip1 = Trim(value)
  1054.       ElseIf name = "ZIP2" Then
  1055.         PData.PZip2 = Trim(value)                   ' name of zip2
  1056.         frm3.apm3PZip2 = Trim(value)
  1057.       ElseIf name = "ZIP3" Then
  1058.         PData.PZip3 = Trim(value)                   ' name of zip3
  1059.         frm3.apm3PZip3 = Trim(value)
  1060.       ElseIf name = "ZIP4" Then
  1061.         PData.PZip4 = Trim(value)                   ' name of zip4
  1062.         frm3.apm3PZip4 = Trim(value)
  1063.       ElseIf name = "ZIP5" Then
  1064.         PData.PZip5 = Trim(value)                   ' name of zip5
  1065.         frm3.apm3PZip5 = Trim(value)
  1066.       ElseIf name = "ZIP6" Then
  1067.         PData.PZip6 = Trim(value)                   ' name of zip6
  1068.         frm3.apm3PZip6 = Trim(value)
  1069.       ElseIf name = "VEND1" Then
  1070.         PData.PVend1 = Trim(value)                  ' name of vend1
  1071.         frm3.apm3PVend1 = Trim(value)
  1072.       ElseIf name = "VEND2" Then
  1073.         PData.PVend2 = Trim(value)                  ' name of vend2
  1074.         frm3.apm3PVend2 = Trim(value)
  1075.       ElseIf name = "VEND3" Then
  1076.         PData.PVend3 = Trim(value)                  ' name of vend3
  1077.         frm3.apm3PVend3 = Trim(value)
  1078.       ElseIf name = "VEND4" Then
  1079.         PData.PVend4 = Trim(value)                  ' name of vend4
  1080.         frm3.apm3PVend4 = Trim(value)
  1081.       ElseIf name = "VEND5" Then
  1082.         PData.PVend5 = Trim(value)                  ' name of vend5
  1083.         frm3.apm3PVend5 = Trim(value)
  1084.       ElseIf name = "VEND6" Then
  1085.         PData.PVend6 = Trim(value)                  ' name of vend6
  1086.         frm3.apm3PVend6 = Trim(value)
  1087.       ElseIf name = "SCREEN" Then
  1088.         PData.PScreen = Trim(value)                 ' name of screen file
  1089.         frm3.apm3PScreen = Trim(value)
  1090.       ElseIf name = "SIZE1" Then
  1091.         PData.PSize1 = CSng(value)                         ' full size of zip1
  1092.         frm3.apm3PSize1 = Trim(value)
  1093.       ElseIf name = "SIZE2" Then
  1094.         PData.PSize2 = CSng(value)                          ' full size of zip2
  1095.         frm3.apm3PSize2 = Trim(value)
  1096.       ElseIf name = "SIZE3" Then
  1097.         PData.PSize3 = CSng(value)                          ' full size of zip3
  1098.         frm3.apm3PSize3 = Trim(value)
  1099.       ElseIf name = "SIZE4" Then
  1100.         PData.PSize4 = CSng(value)                          ' full size of zip4
  1101.         frm3.apm3PSize4 = Trim(value)
  1102.       ElseIf name = "SIZE5" Then
  1103.         PData.PSize5 = CSng(value)                          ' full size of zip5
  1104.         frm3.apm3PSize5 = Trim(value)
  1105.       ElseIf name = "SIZE6" Then
  1106.         PData.PSize6 = CSng(value)                         ' full size of zip6
  1107.         frm3.apm3PSize6 = Trim(value)
  1108.       ElseIf name = "SSIZE" Then
  1109.         PData.PScrSize = CSng(value)                        ' full size of screen file
  1110.         frm3.apm3PScreenSize = Trim(value)
  1111.       ElseIf name = "TEXTENV" Then
  1112.         PData.PTextEnv = Trim(value)               ' text environment
  1113.         frm3.apm3PEnvText = Trim(value)
  1114.       ElseIf name = "ENVDOS" Then
  1115.         If Trim(UCase(value)) = "F" Then
  1116.           PData.PEnvDOS = False                    ' DOS Env
  1117.           frm3.apm3PEDOS = Unchecked
  1118.         Else
  1119.           PData.PEnvDOS = True                    ' DOS Env
  1120.           frm3.apm3PEDOS = Checked
  1121.         End If
  1122.       ElseIf name = "ENVWIN" Then
  1123.         If Trim(UCase(value)) = "F" Then
  1124.           PData.PEnvWin = False                    ' Win Env
  1125.           frm3.apm3PEWin = Unchecked
  1126.         Else
  1127.           PData.PEnvWin = True                    ' Win Env
  1128.           frm3.apm3PEWin = Checked
  1129.         End If
  1130.       ElseIf name = "ENVWIN95" Then
  1131.         If Trim(UCase(value)) = "F" Then
  1132.           PData.PEnvWin95 = False                  ' W95 Env
  1133.           frm3.apm3PEWin95 = Unchecked
  1134.         Else
  1135.           PData.PEnvWin95 = True                  ' W95 Env
  1136.           frm3.apm3PEWin95 = Checked
  1137.         End If
  1138.       ElseIf name = "ENVOS2" Then
  1139.         If Trim(UCase(value)) = "F" Then
  1140.           PData.PEnvOS2 = False                    ' OS2 Env
  1141.           frm3.apm3PEOS2 = Unchecked
  1142.         Else
  1143.           PData.PEnvOS2 = True                    ' OS2 Env
  1144.           frm3.apm3PEOS2 = Checked
  1145.         End If
  1146.       ElseIf name = "ENVOTHER" Then
  1147.         If Trim(UCase(value)) = "F" Then
  1148.           PData.PEnvOther = False                  ' Other Env
  1149.           frm3.apm3PEOther = Unchecked
  1150.         Else
  1151.           PData.PEnvOther = True                  ' Other Env
  1152.           frm3.apm3PEOther = Checked
  1153.         End If
  1154.       ElseIf name = "CLASS1" Then
  1155.         wkint1 = CInt(value)
  1156.         clsptr = 0                             ' catch pointer
  1157.         For i = 0 To (NumClasses - 1)
  1158.             wkint2 = CInt(Trim(Mid(Classes(i + 1), 1, 4)))
  1159.             If wkint1 = wkint2 Then
  1160.               clsptr = i
  1161.               looper = False
  1162.             End If
  1163.         Next i
  1164.         PData.PClass1 = wkint1
  1165.         frm3.apm3Class1.ListIndex = clsptr
  1166.       ElseIf name = "CLASS2" Then
  1167.         wkint1 = CInt(value)
  1168.         clsptr = 0                             ' catch pointer
  1169.         For i = 0 To (NumClasses - 1)
  1170.             wkint2 = CInt(Trim(Mid(Classes(i + 1), 1, 4)))
  1171.             If wkint1 = wkint2 Then
  1172.               clsptr = i
  1173.               looper = False
  1174.             End If
  1175.         Next i
  1176.         PData.PClass2 = wkint1
  1177.         frm3.apm3Class2.ListIndex = clsptr
  1178.       ElseIf name = "CLASS3" Then
  1179.         wkint1 = CInt(value)
  1180.         clsptr = 0                             ' catch pointer
  1181.         For i = 0 To (NumClasses - 1)
  1182.             wkint2 = CInt(Trim(Mid(Classes(i + 1), 1, 4)))
  1183.             If wkint1 = wkint2 Then
  1184.               clsptr = i
  1185.               looper = False
  1186.             End If
  1187.         Next i
  1188.         PData.PClass3 = wkint1
  1189.         frm3.apm3Class3.ListIndex = clsptr
  1190.       ElseIf name = "CLASS4" Then
  1191.         wkint1 = CInt(value)
  1192.         clsptr = 0                             ' catch pointer
  1193.         For i = 0 To (NumClasses - 1)
  1194.             wkint2 = CInt(Trim(Mid(Classes(i + 1), 1, 4)))
  1195.             If wkint1 = wkint2 Then
  1196.               clsptr = i
  1197.               looper = False
  1198.             End If
  1199.         Next i
  1200.         PData.PClass4 = wkint1
  1201.         frm3.apm3Class4.ListIndex = clsptr
  1202.       ElseIf name = "MEMSIZE" Then
  1203.         PData.PMemReq = CSng(value)                        ' memory required
  1204.         frm3.apm3PMem = Trim(value)
  1205.       ElseIf name = "HDREQ" Then
  1206.         If Trim(value) = "F" Then
  1207.           PData.PHdReq = False                     ' hard disk required?
  1208.           frm3.apm3PHDReq = Unchecked
  1209.         Else
  1210.           PData.PHdReq = True                     ' hard disk required?
  1211.           frm3.apm3PHDReq = Checked
  1212.         End If
  1213.       ElseIf name = "HDSIZE" Then
  1214.         PData.PHdReqInM = CSng(value)       ' hard disk in Mb
  1215.         frm3.apm3PHDSize = Trim(value)
  1216.       ElseIf Mid(name, 1, 6) = "FIDDIZ" Then
  1217.         i = CInt(Mid(name, 7, Len(name) - 6))
  1218.         If i > 0 And i < 11 Then
  1219.           PData.PFileIdDiz(i) = Trim(value)
  1220.           If i > PData.PFileIdDizLns Then
  1221.             PData.PFileIdDizLns = i
  1222.           End If
  1223.         Else
  1224.           MsgBox "Invalid line in FIDDIZ. Ignored"
  1225.         End If
  1226.       ElseIf Mid(name, 1, 4) = "LONG" Then
  1227.         i = CInt(Mid(name, 5, Len(name) - 4))
  1228.         If i > 0 And i < 151 Then
  1229.           PData.PLongDesc(i) = Trim(value)
  1230.           If i > PData.PLongDescLns Then
  1231.             PData.PLongDescLns = i
  1232.           End If
  1233.         Else
  1234.           MsgBox "Invalid line in LONG. Ignored"
  1235.         End If
  1236.       ElseIf Mid(name, 1, 4) = "KEYW" Then
  1237.         i = CInt(Mid(name, 5, Len(name) - 4))
  1238.         If i > 0 And i < 151 Then
  1239.           PData.PKeyWords(i) = Trim(value)
  1240.           If i > PData.PKeyWordsLns Then
  1241.             PData.PKeyWordsLns = i
  1242.           End If
  1243.         Else
  1244.           MsgBox "Invalid line in LONG. Ignored"
  1245.         End If
  1246.       ElseIf Mid(name, 1, 3) = "REG" Then
  1247.         i = CInt(Mid(name, 4, Len(name) - 3))
  1248.         If i > 0 And i < 151 Then
  1249.           PData.PReg(i) = Trim(value)
  1250.           If i > PData.PRegLns Then
  1251.             PData.PRegLns = i
  1252.           End If
  1253.         Else
  1254.           MsgBox "Invalid line in REG. Ignored"
  1255.         End If
  1256.         '      frm3.apm3PRegistration.Text = ""
  1257.       ElseIf Mid(name, 1, 4) = "INST" Then
  1258.         i = CInt(Mid(name, 5, Len(name) - 4))
  1259.         If i > 0 And i < 151 Then
  1260.           PData.PInstall(i) = Trim(value)
  1261.           If i > PData.PInstallLns Then
  1262.             PData.PInstallLns = i
  1263.           End If
  1264.         Else
  1265.           MsgBox "Invalid line in INST. Ignored"
  1266.         End If
  1267.         '      frm3.apm3PInstall.Text = ""
  1268.       ElseIf Mid(name, 1, 5) = "VINST" Then
  1269.         i = CInt(Mid(name, 6, Len(name) - 5))
  1270.         If i > 0 And i < 151 Then
  1271.           PData.PVinst(i) = Trim(value)
  1272.           If i > PData.PVinstLns Then
  1273.             PData.PVinstLns = i
  1274.           End If
  1275.         Else
  1276.           MsgBox "Invalid line in VINST. Ignored"
  1277.         End If
  1278.         '      frm3.apm3PVInst.Text = ""
  1279.       ElseIf Mid(name, 1, 4) = "PERM" Then
  1280.         i = CInt(Mid(name, 5, Len(name) - 4))
  1281.         If i > 0 And i < 151 Then
  1282.           PData.PPermiss(i) = Trim(value)
  1283.           If i > PData.PPermissLns Then
  1284.             PData.PPermissLns = i
  1285.           End If
  1286.         Else
  1287.           MsgBox "Invalid line in INST. Ignored"
  1288.         End If
  1289.         '     frm3.apm3PPermiss.Text = ""
  1290.       Else
  1291.         MsgBox ("Unknown line in Program in file. Ignored")
  1292.       End If
  1293.     Wend
  1294.     
  1295.                           ' after all read in - set rest of screen
  1296.                           
  1297.     frm3.apm3AuthNumber = Right("     " + Str(PData.PLink), 5)
  1298.     frm3.apm3AuthName = ""
  1299.     If Trim(AData.AFirstName) <> "" Then
  1300.       frm3.apm3AuthName = frm3.apm3AuthName + Trim(AData.AFirstName) + " "
  1301.     End If
  1302.     If Trim(AData.ALastName) <> "" Then
  1303.       frm3.apm3AuthName = frm3.apm3AuthName + Trim(AData.ALastName)
  1304.     End If
  1305.     If Trim(AData.ACompany) <> "" Then
  1306.       frm3.apm3AuthName = Left(frm3.apm3AuthName + "/" + Trim(AData.ACompany), 40)
  1307.     End If
  1308.     PData.PMaintType = "U"           ' set for big update
  1309.     frm3.apm3RevAdd = False                   ' set screen
  1310.     frm3.apm3RevMaint = False
  1311.     frm3.apm3RevUpdate = True
  1312.     frm3.apm3RevDelete = False
  1313.     PData.PMaintDate = CDate("1/1/1970")     ' date of this revision
  1314.     frm3.apm3PRevDate = ""
  1315.     PData.PMaintComt = Space(20)             ' maint comment
  1316.     frm3.apm3PRevReason = ""
  1317.                     ' build FIDDIZ
  1318.     If PData.PFileIdDizLns > 0 Then
  1319.       frm3.apm3PFileidDiz.Text = PData.PFileIdDiz(1)
  1320.     Else
  1321.       frm3.apm3PFileidDiz.Text = ""
  1322.     End If
  1323.     If PData.PFileIdDizLns > 1 Then
  1324.       For i = 2 To PData.PFileIdDizLns
  1325.         frm3.apm3PFileidDiz.Text = frm3.apm3PFileidDiz.Text + _
  1326.                     Chr$(13) + Chr$(10) + PData.PFileIdDiz(i)
  1327.       Next i
  1328.     End If
  1329.                     ' build LONG
  1330.     If PData.PLongDescLns > 0 Then
  1331.       frm3.apm3PLongDesc.Text = PData.PLongDesc(1)
  1332.     Else
  1333.       frm3.apm3PLongDesc.Text = ""
  1334.     End If
  1335.     If PData.PLongDescLns > 1 Then
  1336.       For i = 2 To PData.PLongDescLns
  1337.         frm3.apm3PLongDesc.Text = frm3.apm3PLongDesc.Text + _
  1338.                     Chr$(13) + Chr$(10) + PData.PLongDesc(i)
  1339.       Next i
  1340.     End If
  1341.  '
  1342.  '                    build KEYW
  1343.     If PData.PKeyWordsLns > 0 Then
  1344.       frm3.apm3PKeywords.Text = PData.PKeyWords(1)
  1345.     Else
  1346.       frm3.apm3PKeywords.Text = ""
  1347.     End If
  1348.     If PData.PKeyWordsLns > 1 Then
  1349.       For i = 2 To PData.PKeyWordsLns
  1350.         frm3.apm3PKeywords.Text = frm3.apm3PKeywords.Text + _
  1351.                     Chr$(13) + Chr$(10) + PData.PKeyWords(i)
  1352.       Next i
  1353.     End If
  1354.  '                    build REG
  1355.     If PData.PRegLns > 0 Then
  1356.       frm3.apm3PRegistration.Text = PData.PReg(1)
  1357.     Else
  1358.       frm3.apm3PRegistration.Text = ""
  1359.     End If
  1360.     If PData.PRegLns > 1 Then
  1361.       For i = 2 To PData.PRegLns
  1362.         frm3.apm3PRegistration.Text = frm3.apm3PRegistration.Text + _
  1363.                     Chr$(13) + Chr$(10) + PData.PReg(i)
  1364.       Next i
  1365.     End If
  1366.   '
  1367.  '                    build INST
  1368.     If PData.PInstallLns > 0 Then
  1369.       frm3.apm3PInstall.Text = PData.PInstall(1)
  1370.     Else
  1371.       frm3.apm3PInstall.Text = ""
  1372.     End If
  1373.     If PData.PInstallLns > 1 Then
  1374.       For i = 2 To PData.PInstallLns
  1375.         frm3.apm3PInstall.Text = frm3.apm3PInstall.Text + _
  1376.                     Chr$(13) + Chr$(10) + PData.PInstall(i)
  1377.       Next i
  1378.     End If
  1379.   '
  1380.  '                    build VINST
  1381.     If PData.PVinstLns > 0 Then
  1382.       frm3.apm3PVInst.Text = PData.PVinst(1)
  1383.     Else
  1384.       frm3.apm3PVInst.Text = ""
  1385.     End If
  1386.     If PData.PVinstLns > 1 Then
  1387.       For i = 2 To PData.PVinstLns
  1388.         frm3.apm3PVInst.Text = frm3.apm3PVInst.Text + _
  1389.                     Chr$(13) + Chr$(10) + PData.PVinst(i)
  1390.       Next i
  1391.     End If
  1392.   '
  1393.  '                    build PERM
  1394.     If PData.PPermissLns > 0 Then
  1395.       frm3.apm3PPermiss.Text = PData.PPermiss(1)
  1396.     Else
  1397.       frm3.apm3PPermiss.Text = ""
  1398.     End If
  1399.     If PData.PPermissLns > 1 Then
  1400.       For i = 2 To PData.PPermissLns
  1401.         frm3.apm3PPermiss.Text = frm3.apm3PPermiss.Text + _
  1402.                     Chr$(13) + Chr$(10) + PData.PPermiss(i)
  1403.       Next i
  1404.     End If
  1405.   '
  1406.   End If                           ' outer loop - if exists
  1407.       
  1408.   Close (prog_lun)
  1409.   
  1410. End Sub
  1411.  
  1412. '
  1413. '            start up procedure
  1414. '
  1415. Sub main()
  1416.  
  1417.   Dim cnt As Integer
  1418.   Dim j As Integer
  1419.   
  1420.   ClassLevel = 1      ' highest class level available
  1421.                       ' use as program level default
  1422.   AuthorFileIn = 0    ' not yet opened
  1423.   Call GetAuthorFile  ' initialize
  1424.   frm1.Show
  1425.   
  1426.   Call BuildClasses(ClassLevel, cnt)
  1427.   For j = 1 To cnt
  1428.     frm3.apm3Class1.AddItem Classes(j)
  1429.     frm3.apm3Class2.AddItem Classes(j)
  1430.     frm3.apm3Class3.AddItem Classes(j)
  1431.     frm3.apm3Class4.AddItem Classes(j)
  1432.   Next j
  1433.   NumClasses = cnt
  1434.   
  1435. End Sub
  1436.  
  1437.  
  1438. '
  1439. '     procedure to write the author information
  1440. '     to the "author.jcs" file
  1441. '
  1442. Public Sub SaveAuthorFile()
  1443.  
  1444.     Dim auth_lun As Integer         ' logical lun for author file
  1445.     Dim name As String
  1446.     Dim value As String
  1447.  
  1448.     auth_lun = FreeFile(0)    ' get lun
  1449.         
  1450.     Open CurDir + "\author.jcs" For Output As auth_lun
  1451.         
  1452.     name = "LINK"
  1453.     value = Right("     " + Str(AData.ALink), 5)
  1454.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1455.     
  1456.     name = "UPDATEDATE"
  1457.     value = Trim(Str(Month(AData.AUpdateDate))) _
  1458.             + "/" _
  1459.             + Trim(Str(Day(AData.AUpdateDate))) _
  1460.             + "/" _
  1461.             + Trim(Str(Year(AData.AUpdateDate)))
  1462.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1463.             
  1464.     name = "UPDATEREASON"
  1465.     value = AData.AUpDateReason
  1466.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1467.     
  1468.     name = "FIRSTNAME"
  1469.     value = AData.AFirstName
  1470.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1471.     
  1472.     name = "LASTNAME"
  1473.     value = AData.ALastName
  1474.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1475.     
  1476.     name = "COMPANY"
  1477.     value = AData.ACompany
  1478.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1479.     
  1480.     name = "ADDRESS1"
  1481.     value = AData.AAddress1
  1482.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1483.     
  1484.     name = "ADDRESS2"
  1485.     value = AData.AAddress2
  1486.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1487.     
  1488.     name = "CITY"
  1489.     value = AData.ACity
  1490.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1491.     
  1492.     name = "STATE"
  1493.     value = AData.AState
  1494.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1495.     
  1496.     name = "ZIP"
  1497.     value = AData.AZip
  1498.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1499.     
  1500.     name = "COUNTRY"
  1501.     value = AData.ACountry
  1502.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1503.     
  1504.     name = "COUNTRYCODE"
  1505.     value = AData.ACountryCode
  1506.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1507.     
  1508.     name = "TELEPHONE"
  1509.     value = AData.ATelephone
  1510.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1511.     
  1512.     name = "FAX"
  1513.     value = AData.AFax
  1514.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1515.     
  1516.     name = "BBS"
  1517.     value = AData.ABBS
  1518.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1519.     
  1520.     name = "CIS"
  1521.     value = AData.ACIS
  1522.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1523.     
  1524.     name = "EMAIL"
  1525.     value = AData.AINetEMail
  1526.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1527.     
  1528.     name = "URL"
  1529.     value = AData.AURL
  1530.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1531.     
  1532.     name = "ASP"
  1533.     If AData.AASP = True Then
  1534.         value = "T"
  1535.     Else
  1536.         value = "F"
  1537.     End If
  1538.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1539.     
  1540.     name = "STAR"
  1541.     If AData.ASTAR = True Then
  1542.         value = "T"
  1543.     Else
  1544.         value = "F"
  1545.     End If
  1546.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1547.     
  1548.     name = "ESC"
  1549.     If AData.AESC = True Then
  1550.         value = "T"
  1551.     Else
  1552.         value = "F"
  1553.     End If
  1554.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1555.     
  1556.     name = "ORG4"
  1557.     If AData.AORG4 = True Then
  1558.         value = "T"
  1559.     Else
  1560.         value = "F"
  1561.     End If
  1562.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1563.     
  1564.     name = "ORG5"
  1565.     If AData.AORG5 = True Then
  1566.         value = "T"
  1567.     Else
  1568.         value = "F"
  1569.     End If
  1570.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1571.     
  1572.     name = "BESTAPPROVE"
  1573.     If AData.ABestApprove = True Then
  1574.         value = "T"
  1575.     Else
  1576.         value = "F"
  1577.     End If
  1578.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1579.     
  1580.     name = "APROVDATE"
  1581.     value = Trim(Str(Month(AData.AAprovDate))) _
  1582.             + "/" _
  1583.             + Trim(Str(Day(AData.AAprovDate))) _
  1584.             + "/" _
  1585.             + Trim(Str(Year(AData.AAprovDate)))
  1586.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1587.     
  1588.     name = "APROVCOMT"
  1589.     value = AData.AAprovComt
  1590.     Print #auth_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1591.     
  1592.     Close (auth_lun)    ' done with it for now
  1593.     AuthorFileIn = 2    ' set as available!
  1594.     
  1595. End Sub
  1596.  
  1597.  
  1598. '
  1599. '   Routine to save what is in the current
  1600. '    program area
  1601. '
  1602. '
  1603. Public Sub SaveProgFile()
  1604.     
  1605.     Dim prog_lun As Integer         ' logical lun for program file
  1606.     Dim name As String
  1607.     Dim value As String
  1608.     Dim i As Integer
  1609.     Dim tst As Integer
  1610.     
  1611.     If ProgFileIn = 0 Then
  1612.         MsgBox "cannot.  Program not read, or name not established"
  1613.         GoTo EndOfSub
  1614.     End If
  1615.     If ProgFileIn = 1 Then
  1616.         tst = MsgBox("About to add New Program Description File. Continue? ", vbYesNo)
  1617.         If tst <> vbYes Then
  1618.             GoTo EndOfSub
  1619.         End If
  1620.     End If
  1621.     
  1622.     prog_lun = FreeFile(0)    ' get lun
  1623.         
  1624.     Open CurDir + "\" + Trim(PData.PProg) + ".jcs" For Output As prog_lun
  1625.     
  1626.     name = "PLINK"
  1627.     value = Trim(Str(PData.PLink))
  1628.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1629.     
  1630.     name = "CLASSLEVEL"
  1631.     value = Trim(Str(PData.PClassLevel))
  1632.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1633.     
  1634.     name = "PROGRAM"
  1635.     value = Left(PData.PProg + Space(8), 8)
  1636.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1637.  
  1638.     name = "MAINTTYPE"
  1639.     value = PData.PMaintType
  1640.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1641.  
  1642.     name = "MAINTDATE"            ' ***********
  1643.     value = Trim(Str(Month(PData.PMaintDate))) _
  1644.             + "/" _
  1645.             + Trim(Str(Day(PData.PMaintDate))) _
  1646.             + "/" _
  1647.             + Trim(Str(Year(PData.PMaintDate)))
  1648.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1649.  
  1650.     name = "MAINTCOMMENT"         ' **********
  1651.     value = Left(PData.PMaintComt + Space(20), 20)
  1652.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1653.       
  1654.     name = "SHORTDESC"
  1655.     value = Left(PData.PShortDesc + Space(20), 20)
  1656.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1657.       
  1658.     name = "MEDDESC"
  1659.     value = Left(PData.PMedDesc + Space(40), 40)
  1660.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1661.       
  1662.     name = "VERSION"
  1663.     value = Left(PData.PVersion + Space(10), 10)
  1664.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1665.       
  1666.     name = "ORIGDATE"
  1667.     value = Trim(Str(Month(PData.POrigDate))) _
  1668.             + "/" _
  1669.             + Trim(Str(Day(PData.POrigDate))) _
  1670.             + "/" _
  1671.             + Trim(Str(Year(PData.POrigDate)))
  1672.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1673.       
  1674.     name = "CURDATE"
  1675.     value = Trim(Str(Month(PData.PCurRelease))) _
  1676.             + "/" _
  1677.             + Trim(Str(Day(PData.PCurRelease))) _
  1678.             + "/" _
  1679.             + Trim(Str(Year(PData.PCurRelease)))
  1680.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1681.       
  1682.     name = "ZIP1"
  1683.     value = Left(PData.PZip1 + Space(8), 8)
  1684.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1685.       
  1686.     name = "ZIP2"
  1687.     value = Left(PData.PZip2 + Space(8), 8)
  1688.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1689.       
  1690.     name = "ZIP3"
  1691.     value = Left(PData.PZip3 + Space(8), 8)
  1692.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1693.       
  1694.     name = "ZIP4"
  1695.     value = Left(PData.PZip4 + Space(8), 8)
  1696.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1697.       
  1698.     name = "ZIP5"
  1699.     value = Left(PData.PZip5 + Space(8), 8)
  1700.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1701.       
  1702.     name = "ZIP6"
  1703.     value = Left(PData.PZip6 + Space(8), 8)
  1704.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1705.     
  1706.     name = "VEND1"
  1707.     value = Left(PData.PVend1 + Space(8), 8)
  1708.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1709.       
  1710.     name = "VEND2"
  1711.     value = Left(PData.PVend2 + Space(8), 8)
  1712.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1713.       
  1714.     name = "VEND3"
  1715.     value = Left(PData.PVend3 + Space(8), 8)
  1716.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1717.       
  1718.     name = "VEND4"
  1719.     value = Left(PData.PVend4 + Space(8), 8)
  1720.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1721.       
  1722.     name = "VEND5"
  1723.     value = Left(PData.PVend5 + Space(8), 8)
  1724.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1725.       
  1726.     name = "VEND6"
  1727.     value = Left(PData.PVend6 + Space(8), 8)
  1728.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1729.       
  1730.     name = "SCREEN"
  1731.     value = Left(PData.PScreen + Space(8), 8)
  1732.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1733.       
  1734.     name = "SIZE1"
  1735.     value = Trim(Str(PData.PSize1))
  1736.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1737.       
  1738.     name = "SIZE2"
  1739.     value = Trim(Str(PData.PSize2))
  1740.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1741.       
  1742.     name = "SIZE3"
  1743.     value = Trim(Str(PData.PSize3))
  1744.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1745.       
  1746.     name = "SIZE4"
  1747.     value = Trim(Str(PData.PSize4))
  1748.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1749.       
  1750.     name = "SIZE5"
  1751.     value = Trim(Str(PData.PSize5))
  1752.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1753.     
  1754.     name = "SIZE6"
  1755.     value = Trim(Str(PData.PSize6))
  1756.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1757.     
  1758.     name = "SSIZE"
  1759.     value = Trim(Str(PData.PScrSize))
  1760.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1761.       
  1762.     name = "TEXTENV"
  1763.     value = Left(PData.PTextEnv + Space(15), 15)
  1764.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1765.       
  1766.     name = "ENVDOS"
  1767.     If PData.PEnvDOS = True Then
  1768.         value = "T"
  1769.     Else
  1770.         value = "F"
  1771.     End If
  1772.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1773.       
  1774.     name = "ENVWIN"
  1775.     If PData.PEnvWin = True Then
  1776.         value = "T"
  1777.     Else
  1778.         value = "F"
  1779.     End If
  1780.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1781.       
  1782.     name = "ENVWIN95"
  1783.     If PData.PEnvWin95 = True Then
  1784.         value = "T"
  1785.     Else
  1786.         value = "F"
  1787.     End If
  1788.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1789.       
  1790.     name = "ENVOS2"
  1791.     If PData.PEnvOS2 = True Then
  1792.         value = "T"
  1793.     Else
  1794.         value = "F"
  1795.     End If
  1796.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1797.       
  1798.     name = "ENVOTHER"
  1799.     If PData.PEnvOther = True Then
  1800.         value = "T"
  1801.     Else
  1802.         value = "F"
  1803.     End If
  1804.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1805.       
  1806.     name = "CLASS1"
  1807.     value = Mid(Classes(PData.PClass1 + 1), 1, 4)
  1808.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1809.       
  1810.     name = "CLASS2"
  1811.     value = Mid(Classes(PData.PClass2 + 1), 1, 4)
  1812.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1813.       
  1814.     name = "CLASS3"
  1815.     value = Mid(Classes(PData.PClass3 + 1), 1, 4)
  1816.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1817.       
  1818.     name = "CLASS4"
  1819.     value = Mid(Classes(PData.PClass4 + 1), 1, 4)
  1820.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1821.       
  1822.     name = "MEMSIZE"
  1823.     value = Trim(Str(PData.PMemReq))
  1824.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1825.       
  1826.     name = "HDREQ"
  1827.     If PData.PHdReq = True Then
  1828.         value = "T"
  1829.     Else
  1830.         value = "F"
  1831.     End If
  1832.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1833.       
  1834.     name = "HDSIZE"
  1835.     value = Trim(Str(PData.PHdReqInM))
  1836.     Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1837.       
  1838.     For i = 1 To PData.PFileIdDizLns
  1839.       name = "FIDDIZ" + Trim(Str(i))
  1840.       value = PData.PFileIdDiz(i)
  1841.       Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1842.     Next i
  1843.     
  1844.     For i = 1 To PData.PLongDescLns
  1845.       name = "LONG" + Trim(Str(i))
  1846.       value = PData.PLongDesc(i)
  1847.       Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1848.     Next i
  1849.     
  1850.     For i = 1 To PData.PKeyWordsLns
  1851.       name = "KEYW" + Trim(Str(i))
  1852.       value = PData.PKeyWords(i)
  1853.       Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1854.     Next i
  1855.     
  1856.     For i = 1 To PData.PRegLns
  1857.       name = "REG" + Trim(Str(i))
  1858.       value = PData.PReg(i)
  1859.       Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1860.     Next i
  1861.     
  1862.     For i = 1 To PData.PInstallLns
  1863.       name = "INST" + Trim(Str(i))
  1864.       value = PData.PInstall(i)
  1865.       Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1866.     Next i
  1867.     
  1868.     For i = 1 To PData.PVinstLns
  1869.     name = "VINST" + Trim(Str(i))
  1870.       value = PData.PVinst(i)
  1871.       Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1872.     Next i
  1873.     
  1874.     For i = 1 To PData.PPermissLns
  1875.     name = "PERM" + Trim(Str(i))
  1876.       value = PData.PPermiss(i)
  1877.       Print #prog_lun, Chr(34); name; Chr(34); ","; Chr(34); value; Chr(34)
  1878.     Next i
  1879.  
  1880.     Close (prog_lun)
  1881. EndOfSub:
  1882.  
  1883. End Sub
  1884.  
  1885.  
  1886. '
  1887. '
  1888. '    keep the inputted values in working storage
  1889. '
  1890. '
  1891. Public Sub TakeAuthorScreen()
  1892.  
  1893.     If IsNumeric(frm2.apm2ANumber) Then
  1894.       AData.ALink = CLng(frm2.apm2ANumber)                   ' initialize fields
  1895.     Else
  1896.       MsgBox ("invalid link number - cannot")
  1897.     End If
  1898.     If IsDate(frm2.apm2AIDate) Then
  1899.       AData.AUpdateDate = CDate(frm2.apm2AIDate)
  1900.     Else
  1901.       AData.AUpdateDate = CDate("1/1/70")
  1902.     End If
  1903.     AData.AUpDateReason = Left(frm2.apm2AUReason + Space(20), 20)
  1904.     AData.AFirstName = Left(frm2.apm2AFirstName + Space(20), 20)
  1905.     AData.ALastName = Left(frm2.apm2ALastName + Space(20), 20)
  1906.     AData.ACompany = Left(frm2.apm2ACompany + Space(30), 30)
  1907.     AData.AAddress1 = Left(frm2.apm2AAddr1 + Space(30), 30)
  1908.     AData.AAddress2 = Left(frm2.apm2AAddr2 + Space(30), 30)
  1909.     AData.ACity = Left(frm2.apm2ACity + Space(20), 20)
  1910.     AData.AState = Left(frm2.apm2AState + "  ", 2)
  1911.     AData.AZip = Left(frm2.apm2AZip + Space(15), 15)
  1912.     AData.ACountry = Left(frm2.apm2ACountry + Space(20), 20)
  1913.     AData.ACountryCode = Left(frm2.apm2ACountryCode + " ", 1)
  1914.     AData.ATelephone = Left(frm2.apm2ATelephone + Space(20), 20)
  1915.     AData.AFax = Left(frm2.apm2AFax + Space(20), 20)
  1916.     AData.ABBS = Left(frm2.apm2ABBS + Space(20), 20)
  1917.     AData.ACIS = Left(frm2.apm2ACIS + Space(20), 20)
  1918.     AData.AINetEMail = Left(frm2.apm2AIEMail + Space(50), 50)
  1919.     AData.AURL = Left(frm2.apm2AURL + Space(80), 80)
  1920.     If frm2.apm2AASP = Checked Then
  1921.         AData.AASP = True
  1922.     Else
  1923.         AData.AASP = False
  1924.     End If
  1925.     If frm2.apm2ASTAR = Checked Then
  1926.         AData.ASTAR = True
  1927.     Else
  1928.         AData.ASTAR = False
  1929.     End If
  1930.     If frm2.apm2AESC = Checked Then
  1931.         AData.AESC = True
  1932.     Else
  1933.         AData.AESC = False
  1934.     End If
  1935.     If frm2.apm2AORG4 = Checked Then
  1936.         AData.AORG4 = True
  1937.     Else
  1938.         AData.AORG4 = False
  1939.     End If
  1940.     If frm2.apm2AORG5 = Checked Then
  1941.         AData.AORG5 = True
  1942.     Else
  1943.         AData.AORG5 = False
  1944.     End If
  1945.     If frm2.apm2ABestApp = Checked Then
  1946.         AData.ABestApprove = True
  1947.     Else
  1948.         AData.ABestApprove = False
  1949.     End If
  1950.     If IsDate(frm2.apm2ABestAppDate) Then
  1951.       AData.AAprovDate = CDate(frm2.apm2ABestAppDate)
  1952.     Else
  1953.       AData.AAprovDate = CDate("1/1/70")
  1954.     End If
  1955.     AData.AAprovComt = Left(frm2.apm2ABestAppCmt + Space(20), 20)
  1956.  
  1957. End Sub
  1958.  
  1959.  
  1960. '
  1961. '    Subroutine to accept the screen values into
  1962. '    the program w/s areas
  1963. '
  1964. '
  1965. Public Sub TakeProgScreen()
  1966.     
  1967.     Dim TmpLnCnt As Integer               ' work areas for subroutine
  1968.     Dim TmpLn(150) As String
  1969.     
  1970.     PData.PLink = CLng(frm3.apm3AuthNumber)                   ' initialize fields
  1971.     PData.PClassLevel = 1
  1972.     PData.PProg = Trim(frm3.apm3Prog)                   ' Program (Master key & file name)
  1973.     If Trim(PData.PProg) <> "" Then
  1974.         If ProgFileIn = 0 Then
  1975.             ProgFileIn = 1
  1976.         End If
  1977.     Else
  1978.         ProgFileIn = 0
  1979.     End If
  1980.     If frm3.apm3RevAdd = True Then
  1981.         PData.PMaintType = "A"                   ' Set for Add if new
  1982.     ElseIf frm3.apm3RevMaint = True Then
  1983.         PData.PMaintType = "M"                   ' Set for Add if new
  1984.     ElseIf frm3.apm3RevUpdate = True Then
  1985.         PData.PMaintType = "M"                   ' Set for Add if new
  1986.     Else
  1987.         PData.PMaintType = "D"                   ' Set for Add if new
  1988.     End If
  1989.     If IsDate(frm3.apm3PRevDate) Then
  1990.       PData.PMaintDate = CDate(frm3.apm3PRevDate)
  1991.     Else
  1992.       PData.PMaintDate = CDate("1/1/70")
  1993.     End If
  1994.     PData.PMaintComt = Left(frm3.apm3PRevReason + Space(20), 20)
  1995.     
  1996.     PData.PShortDesc = Left(frm3.apm3PShtDesc _
  1997.                        + Space(20), 20)
  1998.     PData.PMedDesc = Left(frm3.apm3PMedDesc _
  1999.                     + Space(40), 40)
  2000.     PData.PVersion = Left(frm3.apm3PVer _
  2001.                     + Space(10), 10)
  2002.     If IsDate(frm3.apm3PODate) Then
  2003.       PData.POrigDate = CDate(frm3.apm3PODate)
  2004.     Else
  2005.       PData.POrigDate = CDate("1/1/70")
  2006.     End If
  2007.     If IsDate(frm3.apm3PCDate) Then
  2008.       PData.PCurRelease = CDate(frm3.apm3PCDate)
  2009.     Else
  2010.       PData.PCurRelease = CDate("1/1/70")
  2011.     End If
  2012.     PData.PZip1 = Left(frm3.apm3PZip1 + Space(8), 8)
  2013.     PData.PZip2 = Left(frm3.apm3PZip2 + Space(8), 8)
  2014.     PData.PZip3 = Left(frm3.apm3PZip3 + Space(8), 8)
  2015.     PData.PZip4 = Left(frm3.apm3PZip4 + Space(8), 8)
  2016.     PData.PZip5 = Left(frm3.apm3PZip5 + Space(8), 8)
  2017.     PData.PZip6 = Left(frm3.apm3PZip6 + Space(8), 8)
  2018.     PData.PVend1 = Left(frm3.apm3PVend1 + Space(8), 8)
  2019.     PData.PVend2 = Left(frm3.apm3PVend2 + Space(8), 8)
  2020.     PData.PVend3 = Left(frm3.apm3PVend3 + Space(8), 8)
  2021.     PData.PVend4 = Left(frm3.apm3PVend4 + Space(8), 8)
  2022.     PData.PVend5 = Left(frm3.apm3PVend5 + Space(8), 8)
  2023.     PData.PVend6 = Left(frm3.apm3PVend6 + Space(8), 8)
  2024.     PData.PScreen = Left(frm3.apm3PScreen + Space(8), 8)
  2025.     
  2026.     PData.PSize1 = 0
  2027.     If (frm3.apm3PSize1 <> "") Then
  2028.         PData.PSize1 = CSng(frm3.apm3PSize1)
  2029.     End If
  2030.     PData.PSize2 = 0
  2031.     If (frm3.apm3PSize2 <> "") Then
  2032.         PData.PSize2 = CSng(frm3.apm3PSize2)
  2033.     End If
  2034.     PData.PSize3 = 0
  2035.     If (frm3.apm3PSize3 <> "") Then
  2036.         PData.PSize3 = CSng(frm3.apm3PSize3)
  2037.     End If
  2038.     PData.PSize4 = 0
  2039.     If (frm3.apm3PSize4 <> "") Then
  2040.         PData.PSize4 = CSng(frm3.apm3PSize4)
  2041.     End If
  2042.     PData.PSize5 = 0
  2043.     If (frm3.apm3PSize5 <> "") Then
  2044.         PData.PSize5 = CSng(frm3.apm3PSize5)
  2045.     End If
  2046.     PData.PSize6 = 0
  2047.     If (frm3.apm3PSize6 <> "") Then
  2048.         PData.PSize6 = CSng(frm3.apm3PSize6)
  2049.     End If
  2050.     PData.PScrSize = 0
  2051.     If (frm3.apm3PScreenSize <> "") Then
  2052.         PData.PScrSize = CSng(frm3.apm3PScreenSize)
  2053.     End If
  2054.     PData.PTextEnv = Left(frm3.apm3PEnvText + Space(15), 15)
  2055.     If frm3.apm3PEDOS = Unchecked Then
  2056.         PData.PEnvDOS = False
  2057.     Else
  2058.         PData.PEnvDOS = True
  2059.     End If
  2060.     If frm3.apm3PEWin = Unchecked Then
  2061.         PData.PEnvWin = False
  2062.     Else
  2063.         PData.PEnvWin = True
  2064.     End If
  2065.     If frm3.apm3PEWin95 = Unchecked Then
  2066.         PData.PEnvWin95 = False
  2067.     Else
  2068.         PData.PEnvWin95 = True
  2069.     End If
  2070.     If frm3.apm3PEOS2 = Unchecked Then
  2071.         PData.PEnvOS2 = False
  2072.     Else
  2073.         PData.PEnvOS2 = True
  2074.     End If
  2075.     If frm3.apm3PEOther = Unchecked Then
  2076.         PData.PEnvOther = False
  2077.     Else
  2078.         PData.PEnvOther = True
  2079.     End If
  2080.     
  2081.     PData.PClass1 = frm3.apm3Class1.ListIndex
  2082.     PData.PClass2 = frm3.apm3Class2.ListIndex
  2083.     PData.PClass3 = frm3.apm3Class3.ListIndex
  2084.     PData.PClass4 = frm3.apm3Class4.ListIndex
  2085.  
  2086.     PData.PMemReq = 0                        ' memory required
  2087.     If frm3.apm3PMem <> "" Then
  2088.         PData.PMemReq = CSng(Trim(frm3.apm3PMem))                        ' memory required
  2089.     End If
  2090.     PData.PHdReq = frm3.apm3PHDReq            ' hard disk required?
  2091.     PData.PHdReqInM = 0       ' hard disk in Mb
  2092.     If frm3.apm3PHDSize <> "" Then
  2093.         PData.PHdReqInM = CSng(frm3.apm3PHDSize)       ' hard disk in Mb
  2094.     End If
  2095.                                   ' FIDDIZ
  2096.     Call BreakOutMemo(frm3.apm3PFileidDiz.Text, _
  2097.                      PData.PFileIdDiz, _
  2098.                      PData.PFileIdDizLns, _
  2099.                      45)
  2100.       
  2101.                                   ' LONG
  2102.     Call BreakOutMemo(frm3.apm3PLongDesc.Text, _
  2103.                      PData.PLongDesc, _
  2104.                      PData.PLongDescLns, _
  2105.                      70)
  2106.                                   
  2107.                                   ' KEYW
  2108.     Call BreakOutMemo(frm3.apm3PKeywords.Text, _
  2109.                      PData.PKeyWords, _
  2110.                      PData.PKeyWordsLns, _
  2111.                      70)
  2112.     
  2113.                                   ' REG
  2114.     Call BreakOutMemo(frm3.apm3PRegistration.Text, _
  2115.                      PData.PReg, _
  2116.                      PData.PRegLns, _
  2117.                      70)
  2118.     
  2119.                                    ' INST
  2120.     Call BreakOutMemo(frm3.apm3PInstall.Text, _
  2121.                      PData.PInstall, _
  2122.                      PData.PInstallLns, _
  2123.                      70)
  2124.     
  2125.                                    ' VINST
  2126.     Call BreakOutMemo(frm3.apm3PVInst.Text, _
  2127.                      PData.PVinst, _
  2128.                      PData.PVinstLns, _
  2129.                      70)
  2130.     
  2131.                            ' Permissions
  2132.     Call BreakOutMemo(frm3.apm3PPermiss.Text, _
  2133.                      PData.PPermiss, _
  2134.                      PData.PPermissLns, _
  2135.                      70)
  2136.     
  2137.   
  2138. End Sub
  2139.  
  2140.  
  2141.